package struts.action;

import struts.form.BuscarForm;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import logica.Buscador;
import logica.util.TratamientoCadena;
import logica.util.Util;
import negocio.Documento;
import negocio.busqueda.BusquedaDocumento;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

public class BuscarAction extends org.apache.struts.action.Action {

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        BuscarForm buscar = (BuscarForm) form;
        String keyword = buscar.getKeyword();

        double tiempoBusqueda = 0;
        double startTime = System.currentTimeMillis();
        //me retorna todos los documentos que contiene la keyword
        List<BusquedaDocumento> listaBusquedaDocumento = Buscador.buscar(keyword);
        tiempoBusqueda = System.currentTimeMillis() - startTime;

        if (tiempoBusqueda != 0) {
            tiempoBusqueda = (double) tiempoBusqueda / 1000;
        }

        List<Documento> list = new ArrayList<Documento>();

        List<String> listaKeywords = new ArrayList<String>();
        keyword = TratamientoCadena.tratarTextoBusqueda(keyword);
        StringTokenizer tokenKeywords = new StringTokenizer(keyword);
        while (tokenKeywords.hasMoreElements()) {
            listaKeywords.add(tokenKeywords.nextToken().toString());
        }

        for (BusquedaDocumento busquedaDocumento : listaBusquedaDocumento) {
            Documento documento = busquedaDocumento.getDocumento();
            documento.setDescripcionResultados("<p>" + Util.resaltarKeywordsPrueba(busquedaDocumento.getDocumento().getDescripcion(), listaKeywords));
            list.add(busquedaDocumento.getDocumento());
        }

        HttpSession session = request.getSession();
        session.setAttribute("list_resultados", list);
        session.setAttribute("tiempo_busqueda", new Double(tiempoBusqueda));
        int cantidadResultados = list.size();
        ActionMessages messages = new ActionMessages();
        messages.add("error", new ActionMessage("mensaje.cantidadResultados", cantidadResultados, new Double(tiempoBusqueda)));
        saveMessages(request, messages);

        return mapping.findForward("successBuscar");
    }
}
